package jbl.dao;

import java.io.InputStream;
import java.io.Serializable;
import java.sql.Blob;
import java.util.List;
import java.util.Map;
public interface BaseDaoI<T> {
	/**
	 * 增加
	 * @param o
	 * @return
	 */
	public Serializable save(T o);
	/**
	 *  查询返回一条数据，hql语句中不带参数
	 * @param hql
	 * @return
	 */
	public T get(String hql);
	/**
	 * 使用id获得数据
	 * @param hql
	 * @param params
	 * @return
	 */
	public T get(Class<T> c,Serializable id);
	/*Hibernate不推荐使用这种*/
	public T get(String hql,Object[]params);
	/*推荐这种方式*/
	/**
	 * 查询返回一条数据，hql语句中带参数
	 * @param hql
	 * @param params
	 * @return
	 */
	public T get(String hql,Map<String, Object>params);
	/**
	 * 查询并返回多个结果结果，hql中不带参数
	 * @param hql
	 * @return
	 */
	public List<T> find(String hql);
	/**
	 * 查询并返回多个结果结果，hql中带参数
	 * @param hql
	 * @return
	 */
	public List<T>find(String hql,Map<String, Object>params);
	/**
	 * 带分页功能的
	 * @param hql
	 * @param params
	 * @param page 页数
	 * @param rows 每页条数
	 * @return
	 */
	public List<T>find(String hql,Map<String, Object>params,int page,int rows);
	/**
	 * 分页但不传参
	 * @param hql
	 * @param page
	 * @param rows
	 * @return
	 */
	public List<T>find(String hql,int page,int rows);
	
	/**
	 * 需要返回的总数,不带参数
	 * @param hql
	 * @return
	 */
	public Long count(String hql);
	
	/**
	 * 需要返回的总数,带参数
	 * @param hql
	 * @param params
	 * @return
	 */
	public Long count(String hql,Map<String, Object>params);
	/**
	 * 返回String类型，不带参数
	 * @param hql
	 * @return
	 */
	public String countString(String hql);
	/**
	 * 返回String类型，带参数
	 * @param hql
	 * @return
	 */
	public String countString(String hql,Map<String, Object>params);
	/**
	 * 删除
	 */
	public void delete(T o);
	/**
	 * 更新
	 */
	public void update(T o);
	/**
	 * 添加或者更新
	 * @param o
	 */
	public void saveOrUpdate(T o);
	public void mer(T o);
	Integer executeHql(String hql, Object[] param);
	Integer executeHql(String hql);
	Integer executeHql(String hql, List<Object> param);
	/**
	 * 用于INITMUTE表返回唯一设备ID
	 * @param hql
	 * @return
	 */
	Integer lastInsertID(String hql);
	/**
	 * 返回Bolb
	 */
	public Blob getBlob(InputStream in,Long length);
	/**
	 * load加载
	 */
	public T load(Class<T> c,Serializable id);
	/**
	 * 汇总,带参数
	 */
	public float sum(String hql,Map<String,Object>params);
	/**
	 * 汇总，不带参数
	 */
	public Double sum(String hql);

}
